define(function(require, exports, module) {

			// Widget
			// 相当于swing jcomponent
			// ---------
			// Widget 是与 DOM 元素相关联的组件，主要负责 View 层的管理。
			require('./css/base.css');
			var Base = require('core/base/dist/base');
			var $ = require("./jquery");
			var handlebars = require("./handlebars");
			var Widget = Base.extend({
						//数据
						model : {},
						//所有属性
						prop : {},
						// 默认模板
						template : "<div></div>",
						//子类标识
						classPrefix:"ui-default",
						setModel : function(model) {
							this.model = model;
							this.prop["model"] = model;
							this.change();
						},
						initialize : function(config) {
							if(!config) return;
							// 0:初始化公共参数
							this.initAttr(config);
							// 初始化组件特有参数
							this.initCustAttr();
							// element 初始化
							this.parseElement();
							// widget初始化（供子类覆写）
							this.setup(config);
							// 加载数据
							this.loadData();
							// render
							this.render();
						},
						// 加载数据
						loadData : function() {

						},
						parseElement : function() {
							this.element = $(this.template);
						},
						// 组件加载
						render : function() {
							this.element = this.parseElementFromTemplate();
							var parentNode = this.get('parentNode');
							parentNode.html(this.element);
							return this.element;
						},
						//组装数据和模板
						parseElementFromTemplate : function() {
							var template = this.compile(this.template);
							this.element = $(template(this.prop));
							//容器组件包含其他组件
							//容器组件的内容区默认class接口是J-content
							var content = this.get("content");
							if (content) {
								var contentNode = this.element
										.find(".J-content");
								content.set("parentNode", contentNode);
							}
							return this.element;
						},
						// 子类初始化
						setup : function(config) {
						},
						// 属性初始化
						initAttr : function(config) {
							this.prop = {
								attrs : config.attrs,
								parentNode : $("#" + config.renderTo),
								model : config.model,
								classPrefix:this.classPrefix
							};
						},
						initCustAttr:function(){
							
						},
						// 属性变化
						change : function() {
							this.render();
						},
						// 模板编译
						compile : handlebars.compile,
						//模板引擎
						handlebars:handlebars
					});

			module.exports = Widget;
		});
